package com.liangtian.mdm.system.permission.service;

import com.liangtian.mdm.base.exception.TransactionalException;
import com.liangtian.mdm.system.menu.model.Menu;
import com.liangtian.mdm.system.permission.model.SysRole;
import com.liangtian.mdm.system.permission.model.SysRoleMenu;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * <p>Encoding    :  UTF-8</p>
 * <p>Package Name: com.liangtian.mdm.system.service.role </p>
 * <p>Project Name: chccig-dm </p>
 * <p>Copyright   :  Copyright(c) 2016 石化盈科信息技术有限责任公司 </p>
 * <p>Created Time: 2016-04-27 14:52</p>
 * <p>Description :   角色服务层</p>
 *
 * @author : hj
 * @version :  1.0
 */
public interface SysRoleService {

    /**
     * @param role 角色信息
     * @param ids  权限ID
     * @return
     * @desc 插入中间表数据
     */
    int insertRole(SysRole role, Long[] ids) throws TransactionalException;

    /**
     * @param role 对象
     * @return 受影响的行数
     * @desc 编辑 （编辑数据；启用1；禁用0）
     */
    int updateRole(SysRole role, Long[] ids) throws TransactionalException;

    /**
     * @param params
     * @return 受影响的行数
     * @desc 批量删除角色数据
     * @params参数详情 roleId 角色编号
     */
    int batchDeleteRole(Map<String, Object> params) throws TransactionalException;

    /**
     * @param role 分页数据的信息
     * @return 角色信息
     * @desc 获取全部的角色信息
     * @params参数详情 roleName 权限名称
     * @params参数详情 roleStatus 权限状态
     * @params参数详情 length 每页显示条数
     * @params参数详情 pageNum 页码
     * @params参数详情 start 起始条数
     * @params参数详情 draw 请求次数
     */
    PageInfo queryAllRole(SysRole role);

    /**
     * @param role 角色对象
     * @return 角色对象
     * @desc 查询角色对象
     */
    SysRole queryDocumentByRole(SysRole role);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 删除角色权限的关联表数据
     * @params参数详情 roleId 角色编号
     * @params参数详情 permissionId 权限编号
     */
    int deleteRolePermissionRef(Map<String, Object> params);

    /**
     * @param insertParams
     * @return 受影响的行数
     * @desc 插入角色权限中间表
     * @params参数详情 roleId 角色编号
     * @params参数详情 permissionId 权限编号
     */
    void insertRolePermissionRef(Map<String, Object> insertParams);

    /**
     * @return 受影响的行数
     * @desc 编辑角色状态
     * @params参数详情 permissionId 权限编号
     */
    int editRoleStatus(Map<String, Object> params);

    /**
     * @param role 分页数据的信息
     * @return 角色信息
     * @desc 获取全部的角色信息
     * @params参数详情 roleStatus 角色状态
     */
    List<Map<String, Object>> queryAllRoleList(SysRole role);

    /**
     * @param role 对象
     * @return 受影响的行数
     * @desc 新增角色
     */
    int addRole(SysRole role);

    /**
     * @param role 角色对象
     * @return 受影响的行数
     * @desc 新增角色状态
     */
    int insterRole(SysRole role);

    /**
     * @param role 角色对象
     * @return 受影响的行数
     * @desc 编辑角色状态
     */
    int editRole(SysRole role);

    /**
     * @return 组织机构页面对象
     * @desc 查询数据字典中机密级别的值
     */
    List<Map<String, Object>> queryAllDitconaryList(Map<String, Object> params);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 批量删除角色资源数据
     * @params参数详情 roleId 角色编号
     */
    int batchDeleteRolePermissionRef(Map<String, Object> params);

    PageInfo queryAllRoleShowList(Map<String, Object> param);

    void deleteByIds(String idsStr);

    void inseterRole(SysRole role);

    void saveRoleEdit(SysRole role);

    PageInfo queryUsersRoleList(Map<String, Object> map);

    PageInfo queryNoSelUserList(Map<String, Object> map);

    boolean deleteRoleUser(Map<String, Object> map);

    boolean insertRoleUser(Map<String, Object> param);

    PageInfo queryNoSelUGList(Map<String, Object> param);

    PageInfo queryUGRoleList(Map<String, Object> param);

    boolean insertRoleUserGroup(Map<String, Object> param);

    boolean deleteRoleUserGroup(Map<String, Object> param);

    boolean saveBindResourcesInfo(Map<String, Object> param);

    boolean delBindResourcesInfo(String roleId);

    List<SysRoleMenu> getBindRoleIds(String roleId);

    List<Menu> getAllmenuTree();

    List<SysRoleMenu> getSelectNode(String roleId);

    List<SysRoleMenu> getSelectNodeByUserId(String roleId);

    List<SysRoleMenu> getSelectNodeByGroupId(String roleId);

    public List<SysRole> getRoleListByUserAccount(String userAccount);

}

